using NHibernate.Criterion;

namespace FwkLight.Domain
{
	public interface IFullSpecification<T> : ICriteriaSpecification<T>
	{
		DetachedCriteria EnsureThatWillBeSatisfiedBy(DetachedCriteria criteria);
	}

	public interface IFullSpecification<T, Param1> : ICriteriaSpecification<T, Param1>
	{
		DetachedCriteria EnsureThatWillBeSatisfiedBy(DetachedCriteria criteria, Param1 param1);
	}

  public interface IFullSpecification<T, Param1, Param2> : ICriteriaSpecification<T, Param1, Param2>
	{
		DetachedCriteria EnsureThatWillBeSatisfiedBy(DetachedCriteria criteria, Param1 param1, Param2 param2);
	}

  public interface IFullSpecification<T, Param1, Param2, Param3> : ICriteriaSpecification<T, Param1, Param2, Param3>
  {
    DetachedCriteria EnsureThatWillBeSatisfiedBy(DetachedCriteria criteria, Param1 param1, Param2 param2, Param3 param3);
  }

  public interface IFullSpecification<T, Param1, Param2, Param3, Param4> : ICriteriaSpecification<T, Param1, Param2, Param3, Param4>
  {
    DetachedCriteria EnsureThatWillBeSatisfiedBy(DetachedCriteria criteria, Param1 param1, Param2 param2, Param3 param3, Param4 param4);
  }
}